<?php

// Poblacion
class Poblacion extends Model {

	/**
	*/
	public static function getAllByName($name) {

		// Variables
		$comunidades = array();

		// Consulta SQL
		$comunidad_query = self::$database->query("SELECT comunidad FROM 10poblacion WHERE comunidad LIKE '%" . $name . "%' OR provincia LIKE '%" . $name . "%' OR poblacion LIKE '%" . $name . "%' OR poblacion2 LIKE '%" . $name . "%' GROUP BY comunidad ORDER BY provincia ASC");
		while($comunidad = $comunidad_query->fetch_object()){
			//
			array_push($comunidades, $comunidad);
			$provincia_query = self::$database->query(
				"SELECT provincia, poblacion, poblacion, latitud, longitud, habitantes FROM 10poblacion " . 
				"WHERE comunidad = '" . $comunidad->comunidad . "' AND (comunidad LIKE '%" . $name . "%' OR provincia LIKE '%" . $name . "%' OR poblacion LIKE '%" . $name . "%' OR poblacion2 LIKE '%" . $name . "%') " . 
				"ORDER BY comunidad, provincia, poblacion ASC");

			$provincias = array();
			while($row = $provincia_query->fetch_object()){
				$provincia = new stdClass();
				$provincia->provincia 	= $row->provincia;
				$provincia->poblacion 	= $row->poblacion;
				$provincia->poblacion2	= $row->poblacion2;
				$provincia->latitud		= $row->latitud;
				$provincia->longitud	= $row->longitud;
				$provincia->habitantes	= $row->habitantes;
				$provincias[] = $provincia;
			}
			array_push($comunidades, $provincias);
		}
		return $comunidades;
	}
	
	public static function getByName($name) {

		// Variables
		$comunidades = array();

		// Consulta SQL
		$result = self::$database->query("SELECT * FROM 10poblacion WHERE poblacion LIKE '%" . $name . "%' OR poblacion2 LIKE '%" . $name . "%' ORDER BY poblacion ASC");
		$object = $result->fetch_object('Poblacion');

		return $object;
	}
	
	public static function getAllProvincias() {

		// Variables
		$provincias = array();

		// Consulta SQL
		$result = self::$database->query("SELECT DISTINCT provincia FROM 10poblacion ORDER BY provincia;");
		while($row = $result->fetch_object()){
			$provincias[] = $row->provincia;
		}

		return $provincias;
	}

	/**
	 * Comunidad/Provincia/población que coincide con una latitud/longitud determinada.
	 * @param lat Longitud de la población.
	 * @param lng Latitud de la población.
	 * @return Array de datos de la población con esas latitud/longitud, si no, null.
	 */
	public static function getByPosition($lat, $lng){

		// Consulta SQL
		$query = self::$database->query("SELECT comunidad, provincia, poblacion, poblacion2, latitud, longitud, habitantes FROM 10poblacion WHERE latitud = '" . $lat . "' AND longitud = '" . $lng . "'");
		while($row = $query->fetch_object()){
			$provincia = new stdClass();
			$provincia->comunidad 	= $row->comunidad;
			$provincia->provincia 	= $row->provincia;
			$provincia->poblacion 	= $row->poblacion;
			$provincia->poblacion2	= $row->poblacion2;
			$provincia->latitud		= $row->latitud;
			$provincia->longitud	= $row->longitud;
			$provincia->habitantes	= number_format($row->habitantes, 0, "," , ".");
			return $provincia;
		}
		return;
	}

	/**
	*/
	public static function getAllByPosition($lat, $lng, $rad) {
		$pueblos = array();
	
		$sql_query = 'SELECT *, ( 6371 * ACOS(
					COS( RADIANS('.$lat.') )
					* COS(RADIANS( latitud ) )
					* COS(RADIANS( longitud )
					- RADIANS('.$lng.') )
					+ SIN( RADIANS('.$lat.') )
					* SIN(RADIANS( latitud ) )
					)
				) AS distance
				FROM 10poblacion
				HAVING distance < '.$rad.'
				ORDER BY distance ASC';

		$result = self::$database->query($sql_query);
		while ($row = $result->fetch_object()){
			array_push($pueblos, $row);
		}

		return $pueblos;
	}
}

?>